let array = [1,2,3,4,5,6,7,8]  //定义一个数组,之后我们的所有方法都基于这个数组进行操作

// 1. map: 对数组每一项进行转换，返回新数组，不影响原数组
const mapArr = array.map((item, index, arr) => {
    // item: 当前元素
    // index: 当前索引
    // arr: 原数组
    console.log('map 索引:', index)
    console.log('map 元素:', item)
    return item + 1
})
console.log('map 返回:', mapArr) // [2,3,4,5,6,7,8,9]

// 2. forEach: 遍历数组，对每一项执行回调，不返回新数组（返回undefined），常用于副作用操作
array.forEach((item, index, arr) => {
    // 仅做副作用操作，如打印
    console.log('forEach 索引:', index)
    console.log('forEach 元素:', item)
    // 可以使用索引修改数组
})
// forEach 没有返回值

// 3. filter: 过滤数组，返回所有满足条件的新数组，不影响原数组
const filterArr = array.filter((item, index, arr) => {
    // 只保留偶数
    return item % 2 === 0
})
console.log('filter 返回:', filterArr) // [2,4,6,8]

// 4. find: 查找第一个满足条件的元素，找不到返回undefined
const findItem = array.find((item, index, arr) =>  {
    return item > 5
})
console.log('find 返回:', findItem) // 6

// 5. findIndex: 查找第一个满足条件的元素的索引，找不到返回-1
const findIndexItem = array.findIndex((item, index, arr) => {
    return item > 5
})
console.log('findIndex 返回:', findIndexItem) // 5

// 6. findLast: 查找最后一个满足条件的元素（ES2022+），找不到返回undefined
const findLastItem = array.findLast((item, index, arr) => {
    return item < 5
})
console.log('findLast 返回:', findLastItem) // 4

// 7. findLastIndex: 查找最后一个满足条件的元素的索引（ES2022+），找不到返回-1
const findLastIndexItem = array.findLastIndex((item, index, arr) => {
    return item < 5
})
console.log('findLastIndex 返回:', findLastIndexItem) // 3

// 8. every: 检查所有元素是否都满足条件，返回布尔值
const everyResult = array.every((item, index, arr) => {
    return item > 0
})
console.log('every 返回:', everyResult) // true

// 9. some: 检查是否有任意元素满足条件，返回布尔值
const someResult = array.some((item, index, arr) => {
    return item > 7
})
console.log('some 返回:', someResult) // true

// 10. reduce: 累加/聚合数组，返回累计结果
const reduceResult = array.reduce((acc, item, index, arr) => {
    // acc: 累计值
    // item: 当前元素
    return acc + item
}, 0)
console.log('reduce 返回:', reduceResult) // 36

// 11. reduceRight: 从右到左累加/聚合数组，返回累计结果
const reduceRightResult = array.reduceRight((acc, item, index, arr) => {
    return acc - item
}, 0)
console.log('reduceRight 返回:', reduceRightResult) // -36

// 12. flatMap: 先对每一项做map，再扁平化一层，返回新数组
const flatMapArr = array.flatMap((item, index, arr) => {
    // 每个元素变成 [item, item*2]
    return [item, item * 2]
})
console.log('flatMap 返回:', flatMapArr) // [1,2,2,4,3,6,4,8,5,10,6,12,7,14,8,16]